package cn.piesat.scanning.service;

import cn.piesat.scanning.dto.DbDmsAlgorithmResultStoreDTO;
import cn.piesat.scanning.dto.HtScanningMetadataDTO;

import java.util.List;

/**
 * 专业处理结果数据服务层接口定义。
 * 定义了一些条件查询方法。
 * @author xhl
 */
public interface DbDmsAlgorithmResultStoreService {

    /**
     * 根据传入的条件进行动态查询
     * @param satellite 卫星
     * @param senor 传感器
     * @param resolutions 分辨率
     * @param fileType 文件类型
     * @return
     */
    List<DbDmsAlgorithmResultStoreDTO> specificationList(String satellite, String senor, String resolutions,
                                                         String fileType, String nearDate);

    /**
     * 根据数据等级集合查询day天之前的结果数据信息集合
     * @param day 天数
     * @param resultDataLevelList 数据等级结合
     * @return
     */
    List<DbDmsAlgorithmResultStoreDTO> findByBeforeFileDateAndLevels(Integer day, List<String> resultDataLevelList);

    /**
     * 根据结果数据信息ID删除数据库中的信息
     * @param id
     */
    void removeById(String id);

    /**
     * 根据文件名称查询结果数据信息
     * @param fileName 文件名称
     * @return
     */
    DbDmsAlgorithmResultStoreDTO findByFileName(String fileName);

    /**
     * 根据正则匹配文件名称和时间范围查询     * @param date <=时间
     * @param fileNamePattern 文件名称正则
     * @return
     */
    List<DbDmsAlgorithmResultStoreDTO> regexAndDateRangeTime(String date, String fileNamePattern);

    void deleteOne(DbDmsAlgorithmResultStoreDTO dto);


    List<DbDmsAlgorithmResultStoreDTO> findBeforeDayAndLevelListData(Integer day, List<String> resultDataLevelList);

    List<DbDmsAlgorithmResultStoreDTO> findAfterDayAndLevelListData(Integer day, List<String> resultDataLevelList);

    void deleteByTaskPlanIdIn(List<String> taskPlanIds);

    List<DbDmsAlgorithmResultStoreDTO> listByProductIdentifyListAndTimeRangeAndLevel(List<String> asList, String startTime, String endTime, String level);

    void deleteByFileDateIn(List<String> deleteFileDates);

    List<DbDmsAlgorithmResultStoreDTO> findByDataLevelAndProductIdentifyInAndFileDateBetweenAndFiletype(List<String> asList, String startTime, String endTime, String level, String fileType);

    /**
     * 根据文件类别，文件类型，文件时间查询结果数据
     * @param fileCatalog
     * @param filetype
     * @param fileDate
     * @return
     */
    List<DbDmsAlgorithmResultStoreDTO> findByFileCatalogAndFiletypeAndFileDate(String fileCatalog, String filetype,String fileDate);

    /**
     * 根据文件类别，文件类型，时间范围查询结果数据
     * @param fileCatalog
     * @param filetype
     * @param leftTime
     * @param rightTime
     * @return
     */
    List<DbDmsAlgorithmResultStoreDTO> findByFileCatalogAndFiletypeAndFileDateBetween(String fileCatalog, String filetype,String leftTime,String rightTime);
}
